import type { Component, VNode } from 'vue'

/**
 * 表格列
 */
export type SpColumnsType = {
  /** 列标题 */
  title: string
  /** 列数据在数据项中对应的 key */
  dataIndex: string
  /** 列宽度 */
  width?: string | number
  /* 是否可拖动调整宽度，此时 width 必须是 number 类型 */
  resizable?: boolean
  /* 拖动列最大宽度，会受到表格自动调整分配宽度影响 */
  maxWidth?: number
  /* 拖动列最小宽度，会受到表格自动调整分配宽度影响 */
  minWidth?: number
  /* Vue 需要的 key，如果已经设置了唯一的 dataIndex，可以忽略这个属性 */
  key?: string
  /** 自定义内容渲染器 */
  cellRenderer?: (record: any) => VNode | Component
  /** 列类型 */
  type?: 'slot'
  /** 列是否固定，可选  'left' 'right' */
  fixed?: 'left' | 'right'
  /* 设置列的对齐方式 */
  align?: 'left' | 'right' | 'center'
  /* 单元格内容根据宽度自动省略。 */
  ellipsis?: boolean
}

/**
 * 表格行选择
 * https://www.antdv.com/components/table-cn#selection
 */
export type RowSelectionType = {
  /* checkable 状态下节点选择完全受控（父子数据选中状态不再关联） */
  checkStrictly?: boolean
  /* 自定义列表选择框标题 */
  columnTitle?: string | VNode
  /* 自定义列表选择框宽度 */
  columnWidth?: string | number
  /* 把选择框列固定在左边 */
  fixed?: boolean
  /* 去掉『全选』『反选』两个默认选项 */
  hideDefaultSelections?: boolean
  /* 隐藏全选勾选框与自定义选择项 */
  hideSelectAll?: boolean
  /* 当数据被删除时仍然保留选项的 key */
  preserveSelectedRowKeys?: boolean
  /* 指定选中项的 key 数组，需要和 onChange 进行配合 */
  selectedRowKeys?: string[] | number[]
  /* 自定义选择项 配置项, 设为 true 时使用默认选择项 */
  selections?: object[] | boolean
  /* 多选/单选，checkbox or radio */
  type?: 'radio' | 'checkbox'
  /* 选中项发生变化时的回调 */
  onChange?: (selectedRowKeys: string[] | number[], selectedRows: any[]) => void
}
